package services.common;

import java.util.Date;

import common.constants.ConfConst;
import common.enums.Client;
import common.utils.Factory;
import common.utils.LoggerUtil;
import common.utils.PageBean;
import common.utils.ResultInfo;
import daos.common.RechargeUserDao;
import models.common.bean.RechargeRecord;
import models.common.entity.t_deal_user;
import models.common.entity.t_recharge_user;
import models.common.entity.t_user;
import models.common.entity.t_user_fund;
import models.common.entity.t_withdrawal_user;
import services.base.BaseService;

public class RechargeUserService extends BaseService<t_recharge_user> {

	protected RechargeUserDao rechargeUserDao = Factory.getDao(RechargeUserDao.class);
	protected UserService userService = Factory.getService(UserService.class);
	protected UserFundService userFundService = Factory.getService(UserFundService.class);
	
	protected DealUserService dealUserService = Factory.getService(DealUserService.class);
	
	
	protected RechargeUserService() {
		super.basedao = this.rechargeUserDao;
		
	}
	
	/**
	 * 添加充值记录
	 * @param userId 用户Id
	 * @param serviceOrderNo 业务订单号
	 * @param rechargeAmt 提现金额
	 * @param summary 备注
	 * @param client 登录端
	 * @param imageUrls 上传的凭证
	 * @return
	 * @author Chenzhipeng
	 * @createDate 2016年1月19日
	 *
	 */
	public boolean addUserRecharge(long userId, String serviceOrderNo,
			double rechargeAmt, String summary, Client client,String imageUrls) {
		t_recharge_user rechargeUser = new t_recharge_user();
		t_user user = userService.findByID(userId);
		rechargeUser.time = new Date();
		rechargeUser.order_no = serviceOrderNo;
		rechargeUser.user_id = userId;
		rechargeUser.amount = rechargeAmt;
		rechargeUser.summary = summary;
		rechargeUser.user_or_company = user.is_company;
		rechargeUser.image_urls = imageUrls;
		rechargeUser.setStatus(t_recharge_user.Status.FAILED);  //先失败后成功
		rechargeUser.setClient(client);
		
		return rechargeUserDao.save(rechargeUser);
	}
	
	/**
	 * 充值记录
	 * @param currPage
	 * @param pageSize
	 * @param userId
	 * @return
	 *
	 * @author Chenzhipeng
	 * @createDate 2016年1月16日
	 *
	 */
	public PageBean<t_recharge_user> pageOfDealUser(int currPage,int pageSize, long userId) {

		return rechargeUserDao.pageOfRecharge(currPage, pageSize, userId);
	}

	/**
	 * 统计用户充值次数
	 *
	 * @param userid
	 * @return
	 *
	 * @author DaiZhengmiao
	 * @createDate 2016年2月17日
	 */
	public int countDealOfUser(long userid,t_recharge_user.Status status){
		int count = rechargeUserDao.countByColumn(" user_id=? and status=?", userid,status.code);
		
		return count;
	}
	
	/**
	 * 充值成功，更新相关数据
	 * 
	 * @param serviceOrderNo
	 * @return
	 *
	 * @author Chenzhipeng
	 * @createDate 2016年1月19日
	 *
	 */
	public int updateRechargeToSuccess(String serviceOrderNo) {

		return rechargeUserDao.updateRechargeToSuccess(serviceOrderNo);
	}
	
	/**
	 * 获取充值金额数据
	 * @param startTime
	 * @param endTime
	 * @param type
	 * @return
	 *
	 * @author Chenzhipeng
	 * @createDate 2016年1月23日
	 *
	 */
	public double findTotalRechargeByDate(String startTime, String endTime,
			int type) {

		return rechargeUserDao.findTotalRechargeByDate(startTime, endTime, type);
	}


	/**
	 *	根据流水号更改其状态
	 * @param userId 用户ID
	 * @param serviceOrderNo 充值申请的流水号
	 * @param status 充值记录状态
	 * @param rechargeAmt 充值申请金额
	 * @param summary 充值申请审核建议
	 * @author LiangQiongfeng
	 *@version 2018-1-16 
	 * @return 
	 */
	public ResultInfo updateStatusByNo(long userId, String serviceOrderNo, double rechargeAmt, int status,int oldStatus,String summary) {
		
		ResultInfo result = rechargeUserDao.updateStatusByNo(userId,serviceOrderNo,rechargeAmt,status,oldStatus,summary);
		
		return result;
	}

	/**
	 * 根据状态查询所有处理中的充值申请
	 * @param showType 0-所有；1-个人；2-企业
	 * @param currPage
	 * @param pageSize 
	 * @param exports 导出
	 * @return
	 * @author LiangQiongfeng
	 *@version 2018-1-16 
	 */
	public PageBean<RechargeRecord> pageOfAuditRecharge(int orderValue,int showType, int currPage, int pageSize, int exports,String name) {
		
		return rechargeUserDao.pageOfAuditRecharge(orderValue,showType,currPage,pageSize,exports,name);
	}
	/**
	 * 根据时间查询所有处理中的充值申请
	 * @param showType 0-所有；1-个人；2-企业
	 * @param currPage
	 * @param pageSize 
	 * @param exports 导出
	 * @return
	 * @author LiangQiongfeng
	 *@version 2018-1-16 
	 */
	public PageBean<RechargeRecord> pageOfAuditRecharge(int orderValue,int showType, int currPage, int pageSize, int exports,Date time) {
		
		return rechargeUserDao.pageOfAuditRecharge(orderValue,showType,currPage,pageSize,exports,time);
	}


	/**
	 *	查询充值成功的金额
	 * @param name 会员名字
	 * @return
	 * @author LiangQiongfeng
	 *@version 2018-1-17 
	 */
	public double findRechargeTotalAmt(int showType,String name) {
		
		return rechargeUserDao.findRechargeTotalAmt(showType,name);
	}
	
	public boolean save(t_recharge_user recharge_user){
		return rechargeUserDao.save(recharge_user);
	}

	/**
	 * 充值报表
	 * @param orderValue
	 * @param showType
	 * @param currPage
	 * @param pageSize
	 * @param exports
	 * @return
	 * @author liangqiongfeng
	 *@version 2018-4-11 
	 */
	public PageBean<RechargeRecord> pageOfAuditRecharge(int orderValue,
			int showType, int currPage, int pageSize, int exports) {
		
		return rechargeUserDao.pageOfAuditRecharge(orderValue, showType, currPage, pageSize, exports);
	}

	/**
	 *
	 * @param showType
	 * @param time
	 * @return
	 * @author xiaojun
	 *@version 2018-4-13 
	 */
	public double findRechargeTotalTime(int showType, Date time) {
		// TODO Auto-generated method stub
		return rechargeUserDao.findRechargeTotalTime(showType,time);
	}


}
